home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1995 #2 / Amiga Plus CD - 1995 - No. 2.iso / pd / grafik / mandelsquare-ham / fpinit.asm < prev    next >
Assembly Source File  |  1995-04-11  |  2KB  |  96 lines

  1. ** Revision Header * Header built automatically - do not edit! *************
  2. *
  3. *    (C) Copyright 1991 by Olaf `Olsen' Barthel, all rights reserved
  4. *
  5. *    Name .....: FPInit.asm
  6. *    Created ..: Monday 26-Aug-91 11:20
  7. *    Revision .: 1
  8. *
  9. *    Date            Author          Comment
  10. *    =========       ========        ====================
  11. *    26-Aug-91    Olsen        Created this file!
  12. *
  13. ****************************************************************************
  14.  
  15.     include    "exec/types.i"
  16.     include    "exec/execbase.i"
  17.  
  18. CALL    macro
  19.     xref    _LVO\1
  20.     jsr    _LVO\1(a6)
  21.     endm
  22.  
  23.     XDEF    ___fpinit
  24.     XDEF    ___fpterm
  25.  
  26.     XREF    _XCEXIT
  27.  
  28.     csect    text,0,0,1,2
  29.  
  30.     ;    VOID __fpinit(VOID);
  31.     ;
  32.     ;        This routine is called by the c.o startup code
  33.     ;    in order to set up and initialize math libraries or, just
  34.     ;    like done here, to initialize the '881/'882/'040 chip.
  35.  
  36. ___fpinit:    
  37.     move.l    (4).w,a6        ; Grab SysBase
  38.  
  39.     cmp.w    #37,LIB_VERSION(a6)    ; Kickstart 2.x?
  40.     blt.s    2$
  41.  
  42.     cmp.w    #175,SoftVer(a6)    ; Kickstart 2.x, rev 37.175?
  43.     blt.s    2$
  44.  
  45.     move.w    AttnFlags(a6),d0    ; Get attention flags
  46.  
  47.     btst    #AFB_68020,d0        ; '020 or higher installed?
  48.     beq.s    2$
  49.  
  50.     btst    #AFB_68881,d0        ; '881 or higher installed?
  51.     bne.s    1$
  52.  
  53.     btst    #AFB_FPU40,d0        ; If no '881 present, an '040
  54.     beq.s    2$            ; will do as well
  55.  
  56. 1$    fmove.l    #00000010,fpcr        ; Rounding  = to nearest,
  57.                     ; Precision = extended
  58.     rts
  59.  
  60. 2$    move.l    #1,-(sp)        ; Exit & fail
  61.     jmp    _XCEXIT
  62.  
  63.     ;    VOID __fpexit(VOID);
  64.     ;
  65.     ;        This routine is called by the c.o startup code
  66.     ;    in order to close and release math libraries or, just
  67.     ;    like done here, to reset the '881/'882/'040 chip.
  68.  
  69. ___fpterm:
  70.     rts
  71.  
  72.     pea    (a5)            ; Save A5
  73.  
  74.     move.l    (4).w,a6        ; Grab SysBase
  75.  
  76.     move.w    AttnFlags(a6),d0    ; Get attention flags
  77.  
  78.     btst    #AFB_68881,d0        ; '881 or higher installed?
  79.     bne.s    3$
  80.  
  81.     btst    #AFB_FPU40,d0        ; If no '881 present, an '040
  82.     beq.s    5$            ; will do as well
  83.  
  84. 3$    lea    4$,a5            ; Get address of FPU reset routine,
  85.     CALL    Supervisor        ; call it in supervisor mode,
  86.     bra.s    5$            ; and return
  87.  
  88. 4$    clr.l    -(sp)
  89.     frestore (sp)+
  90.     rte
  91.  
  92. 5$    move.l    (sp)+,a5        ; Restore A5,
  93.     rts                ; and return
  94.  
  95.     end
  96.